package bysj.domain;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;

@Setter
@Getter
@AllArgsConstructor
public final class GraduateProject implements Comparable<GraduateProject>,Serializable{
	private Integer id;
	private String title;
	private double score;
	private GraduateProjectCategory graduateProjectCategory;
	private GraduateProjectType graduateProjectType;
	private GraduateProjectStatus graduateProjectStatus;
	private GraduateProjectSource graduateProjectSource;
	private GraduateProjectTrueness graduateProjectTrueness;

	private Teacher teacher;
	private Student student;
	private int year;

	public GraduateProject() {
		super();
	}

	@Override
	public int compareTo(GraduateProject o) {
		// TODO Auto-generated method stub
		return this.id-o.id;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final GraduateProject other = (GraduateProject) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	/**
	 * Constructs a <code>String</code> with all attributes
	 * in name = value format.
	 *
	 * @return a <code>String</code> representation 
	 * of this object.
	 */
	public String toString()
	{
	    final String TAB = "    ";
	    
	    String retValue = "";
	    
	    retValue = "GraduateProject ( "
	        + super.toString() + TAB
	        + "id = " + this.id + TAB
	        + "title = " + this.title + TAB
	        + "projectCategory = " + this.graduateProjectCategory + TAB
	        + "graduateProjectType = " + this.graduateProjectType + TAB
				+ "graduateProjectStatus = " + this.graduateProjectStatus + TAB
				+ "graduateProjectSource = " + this.graduateProjectSource + TAB
				+ "graduateProjectTrueness = " + this.graduateProjectTrueness + TAB
	        + "teacher = " + this.teacher + TAB
				+ "student = " + this.student + TAB
				+ "year = " + this.year + TAB
	        + " )";
	
	    return retValue;
	}
	
	public static void main(String[] args){
		GraduateProject g1 = new GraduateProject();
		GraduateProject g2 = new GraduateProject();
		System.out.println(g1);
		System.out.println(g2);
		
	}
}
